package cn.drenal.capcap.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.drenal.capcap.common.Response;
import cn.drenal.capcap.entity.Tag;
import cn.drenal.capcap.service.TagService;
import cn.drenal.capcap.entity.vo.TagVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 标签控制器
 */
@RestController
@RequestMapping("/tag")
@RequiredArgsConstructor
public class TagController {

    private final TagService tagService;

    /**
     * 创建标签
     *
     * @param tag 标签信息
     * @return 创建结果
     */
    @PostMapping
    @SaCheckPermission("content:tag:add")
    public Response<TagVO> createTag(@RequestBody Tag tag) {
        return Response.success(tagService.createTag(tag));
    }

    /**
     * 更新标签
     *
     * @param id 标签ID
     * @param tag 标签信息
     * @return 更新结果
     */
    @PutMapping("/{id}")
    @SaCheckPermission("content:tag:edit")
    public Response<TagVO> updateTag(@PathVariable Long id, @RequestBody Tag tag) {
        return Response.success(tagService.updateTag(id, tag));
    }

    /**
     * 删除标签
     *
     * @param id 标签ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    @SaCheckPermission("content:tag:delete")
    public Response<Void> deleteTag(@PathVariable Long id) {
        tagService.deleteTag(id);
        return Response.success();
    }

    /**
     * 根据ID查询标签
     *
     * @param id 标签ID
     * @return 标签信息
     */
    @SaIgnore
    @GetMapping("/{id}")
    public Response<TagVO> getTagById(@PathVariable Long id) {
        return Response.success(tagService.getTagById(id));
    }

    /**
     * 分页查询标签列表
     *
     * @param current 当前页
     * @param size 每页大小
     * @param name 标签名称（可选）
     * @param status 状态（可选）
     * @return 标签分页列表
     */
    @GetMapping("/page")
    @SaCheckPermission("content:tag:list")
    public Response<Page<TagVO>> getTagPage(
            @RequestParam(defaultValue = "1") long current,
            @RequestParam(defaultValue = "10") long size,
            @RequestParam(required = false) String name,
            @RequestParam(required = false) Integer status) {
        Page<Tag> page = new Page<>(current, size);
        return Response.success(tagService.getTagPage(page, name, status));
    }
    
    /**
     * 获取所有启用的标签列表
     *
     * @return 标签列表
     */
    @SaIgnore
    @GetMapping("/list")
    public Response<List<TagVO>> getAllEnabledTags() {
        return Response.success(tagService.getAllEnabledTags());
    }
}